In computer systems development, the system evolves over time in response to changes in system requirements. When dealing with complex systems, and in particular systems exhibiting any form of autonomy or autonomic properties, it is unrealistic to assume that the system will be static. Complex systems evolve over time, and the architecture of an evolving system will change, even at run time, as the system implements self-configuration and self-adaptation, and meets the challenges of its environment. An evolving software system is typically a system that will likely run for a long period of time, and which likely will be corrected and enhanced and changed over a period of time.
In many systems, some portions of the system change very little, if at all, over time, and yet, other portions of the system can change significantly. For example, a tax form preparation program, such as TurboTax® by Intuit, Inc., changes in large measure every year in response to annual changes in the tax laws.
An evolving system can be viewed as multiple versions of the same system. That is, as the system evolves it essentially represents multiple instances of the same system, each with its own variations and specific changes. With sufficiently significant changes, the resulting new version might even be identified and marketed separately from the earlier versions. In the example of TurboTax®, each annual change prompts sufficiently significant changes in the software to package and market the tax preparation software as a different version from the tax preparation software of earlier years.
Conventional software change management systems, such as Revision Control System (RCS), are problematic in that creation of particular builds of the system requires huge amounts of computing resources. For example, with large systems, such as telecommunication management systems, created by Lucent Technologies, or spacecraft control systems, the creation of a build often takes over twelve hours even with complete dedication of the resources of a high-powered server system.
Similar approaches have appeared also in the object-oriented field, but all of these approaches use role models with the same purpose, namely, representing features of the system in isolation from the final enterprise architecture.
For the reasons stated above, and for other reasons stated below which will become apparent to those skilled in the art upon reading and understanding the present specification, there is a need in the art for an architecture of development of a complex software system that is likely to involve many interacting components, that affords uses of state-of-the-art software engineering techniques and reduces the resource requirements in generating a build from the system.